package com.atguigu.yygh.cmn.readlistener;

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.atguigu.yygh.cmn.mapper.DictMapper;
import com.atguigu.yygh.model.cmn.Dict;
import com.atguigu.yygh.vo.cmn.DictEeVo;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

//负责从Excel中读取数据
@Component
public class DictReadListener extends AnalysisEventListener<DictEeVo> {
    //表格中有三条数据,该方法就会执行3次(负责真正的逐行读取)
    //invoke方法的第一个参数,就是当前行数据转换成一个pojo对象,第二个参数就是Excel的上下文对象

    @Autowired
    DictMapper dictMapper;
    @Override
    public void invoke(DictEeVo dictEeVo, AnalysisContext analysisContext) {

        /**
         * 负责真正的逐行读取
         * 将每一行读取出来并写入到数据库
         *
         * dict.setId(dictEeVo.getId());
         * dict.setName(dictEeVo.getName());
         * dict.setDictCode(dictEeVo.getDictCode());
         * dict.setValue(dictEeVo.getValue());
         * dict.setParentId(dictEeVo.getParentId());
         *
         * BeanUtils.copyProperties
         * 方法会自动匹配源对象和目标对象中 相同 名称的属性，
         * 并将源对象的属性值复制到目标对象中。如果属性名称不一致，或者类型不兼容，会抛出异常。
         * 第一个参数:源对象
         * 第二个参数:目标对象
         */
        Dict dict=new Dict();
        BeanUtils.copyProperties(dictEeVo,dict);
        //从dictEeVo中拷贝属性值到dict对象中
        dictMapper.insert(dict);
        System.out.println("dictEeVo = " + dictEeVo);
    }

    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
        System.out.println("所有行数据读取完毕时,会执行一次");
    }
}
